From ffe4f714f3e7e3ee2a4cc2bda324aabddfaf144d Mon Sep 17 00:00:00 2001 From: parkrrrr Date: Fri, 7 Apr 2006 19:02:20 +0000 Subject: [PATCH] Added 'pause' option to nmea output --- gbsleep.c | 4 ++-- nmea.c | 38 +++++++++++++++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/gbsleep.c b/gbsleep.c index 6df09071c..868be5529 100644 --- a/gbsleep.c +++ b/gbsleep.c @@ -35,8 +35,8 @@ gb_sleep(unsigned long microseconds) gb_sleep(unsigned long microseconds) { struct timespec req; - req.tv_sec = 0; - req.tv_nsec = microseconds * 1000; + req.tv_sec = microseconds / 1000000; + req.tv_nsec = (microseconds * 1000) % 1000000000; nanosleep(&req, NULL); } #endif diff --git a/nmea.c b/nmea.c index 68dc6d62b..85ecdcf90 100644 --- a/nmea.c +++ b/nmea.c @@ -163,6 +163,10 @@ static char *nogpvtg = NULL; static char *nogpgsa = NULL; static char *snlenopt = NULL; static char *optdate = NULL; +static char *opt_sleep = NULL; +static long sleepus = 0; + +static time_t last_time = -1; arglist_t nmea_args[] = { {"gprmc", &dogprmc, "Write GPRMC sentences", NULL, ARGTYPE_BOOL, ARG_NOMINMAX }, @@ -171,6 +175,8 @@ arglist_t nmea_args[] = { {"nogpvtg", &nogpvtg, "Don't write GPVTG sentences", NULL, ARGTYPE_BOOL, ARG_NOMINMAX }, {"nogpgsa", &nogpgsa, "Don't write GPGSA sentences", NULL, ARGTYPE_BOOL, ARG_NOMINMAX }, {"date", &optdate, "Complete date-free tracks with given date (YYYYMMDD).", NULL, ARGTYPE_INT, ARG_NOMINMAX }, + {"pause", &opt_sleep, "Pause between groups of strings", NULL, + ARGTYPE_STRING, ARG_NOMINMAX }, ARG_TERMINATOR }; @@ -205,6 +211,15 @@ static void nmea_wr_init(const char *portname) { file_out = xfopen(portname, "w+", MYNAME); + + if ( opt_sleep ) { + if ( *opt_sleep ) { + sleepus = 1e6 * atof(opt_sleep); + } + else { + sleepus = -1; + } + } mkshort_handle = mkshort_new_handle(); setshort_length(mkshort_handle, atoi(snlenopt)); @@ -738,6 +753,12 @@ nmea_wayptpr(const waypoint *wpt) } +void +nmea_track_init(const route_head *rte) +{ + last_time = -1; +} + void nmea_trackpt_pr(const waypoint *wpt) { @@ -749,6 +770,21 @@ nmea_trackpt_pr(const waypoint *wpt) time_t hms; time_t ymd; + if ( opt_sleep ) { + if ( last_time > 0 ) { + if ( sleepus >= 0 ) { + gb_sleep( sleepus ); + } + else { + long wait_time = wpt->creation_time - last_time; + if ( wait_time > 0 ) { + gb_sleep( wait_time * 1000000 ); + } + } + } + last_time = wpt->creation_time; + } + lat = degrees2ddmm(wpt->latitude); lon = degrees2ddmm(wpt->longitude); @@ -840,7 +876,7 @@ static void nmea_write(void) { waypt_disp_all(nmea_wayptpr); - track_disp_all(NULL, NULL, nmea_trackpt_pr); + track_disp_all(nmea_track_init, NULL, nmea_trackpt_pr); } ff_vecs_t nmea_vecs = { -- 2.30.2